package com.jiankangjin.base.web.filter;

import com.jiankangjin.base.ColumnSortType;

/**
 * 用来传递列表对象的ThreadLocal数据
 * Created by mzlion on 2014/07/24.
 *
 * @since jdk1.7
 */
public final class SystemContext {

    /**
     * 分页大小
     */
    private static ThreadLocal<Integer> pageSize = new ThreadLocal<>();

    /**
     * 分页的起始页
     */
    private static ThreadLocal<Integer>  pageNo = new ThreadLocal<>();

    /**
     * 列表的排序字段
     */
    private static ThreadLocal<String>  sortName = new ThreadLocal<>();

    /**
     * 列表的排序方式
     */
    private static ThreadLocal<String> sortType = new ThreadLocal<>();

    /**
     * 存储物理路径
     */
    private static ThreadLocal<String> realPath = new ThreadLocal<>();

    /**
     * 项目访问地址
     */
    private static ThreadLocal<String> projectUri = new ThreadLocal<>();

    /**
     * 从{@code ThreadLocal}移除物理路径信息(其操作系统的路径)
     */
    public static void  removeRealPath() {
        SystemContext.realPath.remove();
    }

    /**
     * 从{@code ThreadLocal}移除分页大小信息
     */
    public static void  removePageSize() {
        SystemContext.pageSize.remove();
    }

    /**
     * 从{@code ThreadLocal}移除当前页码信息
     */
    public static void  removePageNo() {
        SystemContext.pageNo.remove();
    }

    /**
     * 从{@code ThreadLocal}移除排序名称信息
     */
    public static void  removeSortName() {
        SystemContext.sortName.remove();
    }

    /**
     * 从{@code ThreadLocal}移除排序类型信息
     */
    public static void  removeSortType() {
        SystemContext.sortType.remove();
    }

    /**
     * 从{@code ThreadLocal}移除项目地址信息(项目地址返回格式为http://host/projectname)
     */
    public static void  removeProjectUri() {
        SystemContext.projectUri.remove();
    }



    /**
     * 从{@code ThreadLocal}得到项目物理路径(其操作系统的路径)
     */
    public static String getRealPath() {
        return realPath.get();
    }

    /**
     * 从{@code ThreadLocal}设置物理路径信息(其操作系统的路径)
     * @param _realpath 物理路径信息
     */
    public static void setRealPath(String _realpath) {
        SystemContext.realPath.set(_realpath);
    }

    /**
     * 从{@code ThreadLocal}得到分页页码
     */
    public static Integer getPageNo() {
        return pageNo.get();
    }

    /**
     * 设置分页页码
     * @param _pageOffset 页码
     */
    public static void setPageNo(Integer _pageOffset) {
        SystemContext.pageNo.set(_pageOffset);
    }

    /**
     * 从{@code ThreadLocal}得到分页大小
     */
    public static Integer getPageSize() {
        return pageSize.get();
    }

    /**
     * 设置分页大小
     * @param _pageSize 分页大小
     */
    public static void setPageSize(Integer _pageSize) {
        SystemContext.pageSize.set(_pageSize);
    }

    /**
     * 从{@code ThreadLocal}得到字段排序名
     */
    public static String getSortName() {
        return sortName.get();
    }

    /**
     * 设置字段排序名称
     * @param _sortName 字段排序名
     */
    public static void setSortName(String _sortName) {
        SystemContext.sortName.set(_sortName);
    }

    /**
     * 从{@code ThreadLocal}得到字段排序类型
     */
    public static String getSortType() {
        return sortType.get();
    }

    /**
     * 设置字段排序类型，根据数据库规范，仅支持传入ASC和DESC两种字符串.<br>
     * 如果传入的字符串不符合规则，则默认设置为ASC
     * @param _sortType 字段排序类型
     */
    public static void setSortType(String _sortType) {
        if (null != _sortType && !_sortType.isEmpty()) {
            if (ColumnSortType.ASC.getSortType().equalsIgnoreCase(_sortType)) {
                SystemContext.sortType.set(ColumnSortType.ASC.getSortType());
            } else if (ColumnSortType.DESC.getSortType().equalsIgnoreCase(_sortType)) {
                SystemContext.sortType.set(ColumnSortType.DESC.getSortType());
            } else {
                SystemContext.sortType.set(ColumnSortType.ASC.getSortType());
            }
        }
    }

    /**
     * 从{@code ThreadLocal}得到项目地址信息(项目地址返回格式为http://host/projectname)
     */
    public static String getProjectUri() {
        return projectUri.get();
    }

    /**
     * 设置项目URL地址信息
     * @param _projectUri URL地址信息(项目地址格式为http://host/projectname)
     */
    public static void setProjectUri(String _projectUri) {
        SystemContext.projectUri.set(_projectUri);
    }

}
